package com.yvon.service.demo.spring.context.event;

import com.yvon.service.demo.spring.context.ApplicationEvent;
import com.yvon.service.demo.spring.context.ApplicationListener;

/**
 * 事件广播器
 *
 * @author Yvon
 * @since 2022-12-29
 */
public interface ApplicationEventMulticaster {

    /**
     * 添加应用程序侦听器
     *
     * @param listener 侦听器
     */
    void addApplicationListener(ApplicationListener<?> listener);

    /**
     * 删除应用程序侦听器
     *
     * @param listener 侦听器
     */
    void removeApplicationListener(ApplicationListener<?> listener);

    /**
     * 广播事件
     *  最终推送事件消息也会经过这个接口方法来处理谁该接收事件。
     *
     * @param event 事件
     */
    void multicastEvent(ApplicationEvent event);
}
